Cấu trúc Chuỗi_truy_vấn

Một URL điển hình chứa một query string sẽ có dạng như sau:

http://example.com/over/there?name=ferret

Khi một máy chủ nhận một yêu cầu một trang như vậy, nó có thể trả về trang người dùng yêu cầu, và bỏ qua các query string mà trong trường hợp này là, name=ferret.  Dấu hỏi trong cấu trúc trên được dùng để phân chia các thành phần scheme, host, port (nếu có) và path với query string và không phải là thành phần của query string.[1][2]Các web frameworks có thể cung cấp các phương pháp để xử lí cú pháp (parse) nhiều thông số trong các query string, khi chúng được tách ra trong các URL bởi các dấu phân cách. Trong URL ví dụ dưới đây, các query string được tách ra bởi kí hiệu '&':

http://example.com/path/to/page?name=ferret&color=purple

Ở ví dụ này, có thể thấy rằng có 2 query string trong URL, đó là name=ferretcolor=purple.

Các query string không có cấu trúc tiêu chuẩn. Các phương pháp được sử dụng để phân tích cú pháp các query string có thể khác nhau, tùy thuộc vào các nhà phát triển của website đó.

Một liên kết trong một trang web có thể có một URL mà có một query string. HTML xác định ba cách mà một người có thể tạo ra những query string:

  • Một HTML form thông qua các thẻ <form>...</form>
  • Một ánh xạ từ phía server thông qua ismap là một thuộc tính của thẻ <img> với cấu trúc <img ismap>
  • Một thẻ tìm kiếm giờ đây đã bị bác bỏ là <isindex>

Web forms

Khi một web form chứa các trường field1, field2, field3  được gọi, các nội dung của các trường đó sẽ được mã hóa thành một query string như sau:

field1=value1&field2=value2&field3=value3...

  • Các query string bao gồm một loạt các cặp trường giá trị.
  • Trong mỗi cặp, tên trường và giá trị được tách ra bởi một dấu bằng, '='.
  • Một loạt các cặp được cách nhau bằng kí hiệu '&' (hoặc dấu chấm phẩy, ';' cho đường dẫn được nhúng trong HTML và không được tạo ra bởi một cặp thẻ <form>...</form>).

Dù các query string không có cấu trúc tiêu chuẩn, các web frameworks cho phép nhiều giá trị được kết hợp trong một trường (ví dụ như field1=value1field1=value2field2=value3).[3][4]

Với mỗi trường của một form, query string có một cặp field=value. Các web form có thể bao gồm những trường mà người dùng không thể nhìn thấy, các trường này được lồng trong các query string khi các form được gởi (submit).[5]

W3C khuyến cáo tất cả các web server hỗ trợ dùng dấu chấm phẩy bên cạnh dấu "&"[6] để cho phép các application/x-en-form-urlencoded query string trong URL trong tài liệu HTML mà không cần phải phân cách dấu "&".

Các nội dung form chỉ được mã hóa trong các URL's query string trong phương thức đệ trình của form là GET. Phương pháp mã hóa tương tự được dùng mặc định khi phương thức đệ trình là POST, nhưng kết quả được server hiểu như là một yêu cầu HTTP (HTTP request) chứ không phải là một URL bị thay đổi.

Query string trong công cụ tìm kiếm

Lấy ví dụ với công cụ tìm kiếm Google và trình duyệt Google Chrome. Khi người dùng truy xuất vào thanh tìm kiếm của trình duyệt và gõ nội dung tìm kiếm vào đó, nội dung tìm kiếm sẽ được gởi đến server ở dạng query string cùng với phương thức GET và thêm nào nhiều quy trình mã hóa khác, tất cả tạo nên URL mà người dùng có thề nhìn thấy trên thanh tìm kiếm. Do đó việc này sẽ rất tiện lợi khi người dùng chỉ cần nhập vào công cụ tìm kiếm nội dung cần tìm thì có thể sẽ nhận được nội dung yêu cầu.[7][8]

Khi đoạn văn bản trên thanh tìm kiếm được gởi đi (người dùng nhấn Enter), nó sẽ được mã hóa thành một query string có dạng như sau:

argument1+argument2+argument3...

Các query string bao gồm một loạt các đối số được xử lí cú pháp với các khoảng trắng được thay bằng dấu cộng '+'.

Tài liệu tham khảo

WikiPedia: Chuỗi_truy_vấn http://docs.oracle.com/javaee/6/api/javax/servlet/... http://tools.ietf.org/html/rfc3986#section-3 http://tools.ietf.org/html/rfc3986#section-3.4 http://www.w3.org/TR/1999/REC-html401-19991224/app... http://www.w3.org/TR/REC-html40/interact/forms.htm... http://www.w3.org/wiki/HTML/Elements/isindex //en.wikipedia.org/wiki/Category:CS1_maint:_Multip... https://stackoverflow.com/questions/1746507/author... https://httpd.apache.org/docs/2.2/mod/core.html#li... https://tools.ietf.org/html/rfc7230#section-3.1.1